// ■ 题目描述

// 考古问题，假设以前的石碑被打碎成了很多块，
// 每块上面都有一个或若干个字符，请你写个程序来把之前石碑上文字可能的组合全部写出来，按升序进行排列。
// 示例1   输入输出示例仅供调试，后台判题数据一般不包含示例

// 输入

// 3

// a b c

// 输出

// abc

// acb

// bac

// bca

// cab

// cba

// 示例2   输入输出示例仅供调试，后台判题数据一般不包含示例

// 输入

// 3

// a b a

// 输出

// aab

// aba

// baa

var permutation = function (s) {
    const rec = [], vis = [];
    const n = s.length;
    const arr = Array.from(s).sort();
    const perm = [];
    const backtrack = (arr, i, n, perm) => {
        if (i === n) {
            console.log(perm)
            rec.push(perm.toString());
            return;
        }
        for (let j = 0; j < n; j++) {
            if (vis[j] || (j > 0 && !vis[j - 1] && arr[j - 1] === arr[j])) {
                continue;
            }
            vis[j] = true;
            perm.push(arr[j]);
            backtrack(arr, i + 1, n, perm);
            perm.pop();
            vis[j] = false;
        }
    }

    backtrack(arr, 0, n, perm);
    const size = rec.length;
    const recArr = new Array(size).fill(0);
    for (let i = 0; i < size; i++) {
        recArr[i] = rec[i].split(',').join('');
    }
    return recArr.sort();
};
console.log(
    permutation('abc')
)